//
//  HMComposeTextView+Extension.swift
//  Weibo
//
//  Created by 黄亦寒 on 2016/10/8.
//  Copyright © 2016年 HM. All rights reserved.
//

import UIKit

extension HMComposeTextView {
    //通过富文本获取对应文本内容
    var emoticonText:String {
        var result = ""
        
        //遍历富文本通过文本附件获取对应表情模型
        self.attributedText.enumerateAttributes(in: NSMakeRange(0, self.attributedText.length), options: []) { (info, range, _) in
            
            if let attachment = info["NSAttachment"] as? HMTextAttachment {
                //代表是图片
                let chs = attachment.emoticon?.chs
                result += chs!
            }else{
                //代表是文本
                let text = self.attributedText.attributedSubstring(from: range).string
                result += text
            }
        }
        return result
    }
    
    
    //根据表情模型的类型设置富文本
    func insertEmoticon(emoticon:HMEmoticon) {
        //执行到此，说明通知对象不为空
        if emoticon.type == "0" {
            //代表是图片
            //取到表情描述
            //            let chs = emoticon.chs
            //            textView.insertText(chs!)
            //把表情描述转成富文本显示
            //记录上一次的富文本
            let lastAttributedString = NSMutableAttributedString(attributedString: self.attributedText)
//            //根据表情路径创建UIImage对象
//            let image = UIImage(named:emoticon.path!)
//            //根据image对象创建文本附件
//            let attachment = HMTextAttachment()
//            //设置文本附件对应的表情模型
//            attachment.emoticon = emoticon
//            //设置图片大小
//            //获取字体高度
//            let fontHeight = self.font?.lineHeight
//            //通过设置文本附件的bounds调整表情的显示位置
//            attachment.bounds = CGRect(x: 0, y: -4, width: fontHeight!, height: fontHeight!)
//            attachment.image = image
//            //根据文本附件创建符文富文本
//            let attributedStr = NSAttributedString(attachment: attachment)
            let attributedStr = NSAttributedString.attributedStringWithEmoticon(emoticon: emoticon, font: self.font!)
            
            //添加被点击的表情富文本
            //lastAttributedString.append(attributedStr)
            //获取文本选中的范围
            var selectedRange = self.selectedRange
            //把文本被选中的范围替换为富文本
            lastAttributedString.replaceCharacters(in: selectedRange, with: attributedStr)
            
            //设置富文本的字体防止表情图片大小不一,value一定要解包防止崩溃
            lastAttributedString.addAttribute(NSFontAttributeName, value: self.font!, range: NSMakeRange(0, lastAttributedString.length))
            //设置富文本
            self.attributedText = lastAttributedString
            //每次点击表情光标位置加1
            selectedRange.location += 1
            //设置选中范围的长度
            selectedRange.length = 0
            self.selectedRange = selectedRange
            //添加富文本占位符不会消失，需要发送通知
            NotificationCenter.default.post(name: NSNotification.Name.UITextViewTextDidChange, object: nil)
            //添加富文本发送按钮状态不会改变，需要调用代理方法
            self.delegate?.textViewDidChange?(self)
        }else{
            //emoji
            let emoji = (emoticon.code! as NSString).emoji()
            self.insertText(emoji!)
            
        }
    }
    
}
